<?php
  /**
   * @brief adjunta un archivo
   *
   * @param string $filename
   * @param integer $size
   * @param bynary $data
   * @param string $mime
   * @param integer $idmetodo
   * @param integer $idmuestra
   * @return integer $rAfectados
   */
	static function insertarArchivoResultado($filename, $size, $data, $mime, $idmetodo, $idmuestra) {
    $query = new QueryBD();
    $query->iniciarTransaccion(2, true, "archivoresultado");
    $oid = pg_lo_create($query->conn);
    $params = array($idmetodo, $idmuestra, $filename, "archivo $idmetodo-$idmuestra", $mime, $size, $oid);
    $rAfectados = $query->ingresar(SQLResultado::INSERTAR_ARCHIVORESULTADO, $params);
    $handle = pg_lo_open($query->conn, $oid, "w");
    pg_lo_write($handle, $data);
    pg_lo_close($handle);
    $query->finalizarTransaccion();
    return $rAfectados;
  }

  /**
   * @brief Consulta la informacion relativa a un archivo sin mostrar su data
   *
   * @param integer $idmetodo
   * @param integer $idmuestra
   * @return array [nombre, descripcion, mime, tamano, oidarchivo]
   */
  static function consultarArchivoResultado($idmetodo, $idmuestra) {
    $query = new QueryBD();
    $params = array($idmetodo, $idmuestra);
    $tabla = $query->seleccionar(SQLResultado::CONSULTAR_ARCHIVORESULTADO, $params);
    return $tabla;
  }

  /**
   * @brief Elimina un archivo a la dupla idmetodo, idmuestra
   *
   * @param integer $idmetodo
   * @param integer $idmuestra
   * @return integer $rAfectados
   */
  static function eliminarArchivoResultado($idmetodo, $idmuestra) {
    $query = new QueryBD();
    $query->iniciarTransaccion(2, true, "archivoresultado");
    $params = array($idmetodo, $idmuestra);
    $tabla = $query->seleccionar(SQLResultado::OID_ARCHIVORESULTADO, $params);
    $oid = $tabla[0]['oidarchivo'];
    pg_lo_unlink($query->conn, $oid);
    $rAfectados = $query->eliminar(SQLResultado::ELIMINAR_ARCHIVORESULTADO, $params);
    $query->finalizarTransaccion();
    return $rAfectados;
  }

  /**
   * @brief despliega el archivo al navegador
   *
   * @param string $mime
   * @param integer $tamano
   * @param string $nombre
   * @param integer $oid
   */
  static function mostrarArchivoResultado($mime, $tamano, $nombre, $oid){
    header("Content-type: ".$mime);
    header("Content-length: ".$tamano);
    header("Content-Disposition: attachment; filename=\"$nombre.\"");
    $query = new QueryBD();
    $query->iniciarTransaccion(2, true, "archivoresultado");
    $handle = pg_lo_open($query->conn, $oid, "r");
    pg_lo_read_all($handle);
    $query->finalizarTransaccion();
  }
?>